文章未來將更新於:
https://kevinyay945.com/golang-project-design/2023/generate-rest-api-by-swagger/
在寫Rest API的時候,最讓人困擾的點不外乎就是程式中的實際輸出因為你的文件沒有及時更新,導致實際的API規格跟文件上的不一致
會有這件事情的發生,原因就是因為文件跟程式兩個不是同步進行的,你需要把程式改寫好之後,再把需要的資料回填到文件中
很多時候一些小小的異動,很容易因為一些急迫的上線需求,而導致忘記更新文件,久而久之文件就漸漸的沒有了他文件的價值了
因此,今天分享的這個工具就是來解決這個讓人困擾的問題
https://github.com/deepmap/oapi-codegen
透過這個工具,他可以將你現有的swagger文件變成你需要實踐的api的interface,接下來只需要去建立一個struct來implement他提供的interface,那你的程式就完成了
而且他產生的interface中,除了所需要的api,如果你有預先設定好componenet的話,他也可以幫你產生相對應的struct,透過這些方式,就可以保證你的文件跟程式碼之間是沒有誤差的,我們要做的就是完善文件,然後把需要的程式碼填入相對應的method中,就可以完成需要的程式碼了
使用方法如下
他的指令有不少,這次會使用到的是其中的兩種
https://github.com/kevinyay945/2023_asset_management/blob/v0.2.0/Makefile#L10
oapi-codegen -generate types -o "interface/rest_api/openapi_types.gen.go" -package "api" "asset/swagger/swagger.yaml"
oapi-codegen -generate server -o "interface/rest_api/openapi_api.gen.go" -package "api" "asset/swagger/swagger.yaml"
裡面有幾個比較重要的變數
-o : 產出的檔案要放在什麼位置
-package : 產出的檔案的package的名稱
而最後一個則是你的swagger擺放的位置
至於swagger的撰寫,我這邊就不多做介紹,但我很推薦大家可以直接到swagger editor裡面直接看看
並且擷取你需要的部分就可以了
另外有個重點是
我目前這個工具只有支援openapi 3.0
所以在找資料的時候要特別看一下你現在的說明是哪一個版本的喔
這兩個版本並沒有互相間容的
這是將這些內容實做後的程式碼,可以連進去做參考
https://github.com/kevinyay945/2023_asset_management/tree/v0.2.0
https://github.com/ThreeDotsLabs/wild-workouts-go-ddd-example